package com.probiz.estore.product.service;

import java.util.List;
import java.util.Map;

import com.probiz.estore.common.model.product.Product;
import com.probiz.estore.common.model.product.ProductSku;
import com.probiz.estore.core.service.GenericManager;

/**
 * Manager interface for ProductSku, responsible for business processing, and communicate between web and persistence layer.
 *
 */
public interface ProductSkuManager extends GenericManager<ProductSku> {
	/**
	 * 保存SKUs，从数组中获取必要参数
	 * @param returnMsgs 返回参数
	 * @param skuIds SKU id数组
	 * @param skuNames SKU 单品编码数组
	 * @param skuImageUrls SKU 图片url数组
	 * @param listPrices 市场价
	 * @param prices 售价
	 * @param salePrices 特价
	 * @param weights 重量
	 * @param skuOptionValueInfos 规格信息
	 * 返回新的SKU id数组
	 */
	public List<String>  saveSkusFromArrays(Product product,Map<String, Object>  returnMsgs,  String[] skuIds, String[] skuCodes,
			String[] skuImageUrls,String[] listPrices,String[] prices,String[] salePrices,String[] weights,String[] skuOptionValueInfos);
	/**
	 * 保存价格信息，从数组中获取必要参数
	 * @param returnMsgs 返回参数
	 * @param skuIds SKU id数组
	 * @param listPrices 市场价
	 * @param prices 售价
	 * @param salePrices 特价
	 * @param weights 重量
	 * 返回新的SKU id数组
	 */
	public List<String> savePricesFromArrays(Map<String, Object>  returnMsgs, String[] skuIds, String[] listPrices,String[] prices,String[] salePrices,String[] weights);
	/**
	 * 生成单品的skuOptionValueInfo 数组
	 * @param returnMsgs 返回参数
	 * @param skuIds skuid数组
	 * @param optionIds 关联规格id数组
	 * @param optionValueIds 关联规格值id二维数组
	 * @return 单品的skuOptionValueInfo 数组 参见pdm 格式形如 1:2;2:5;
	 */
	public String[] getSkuOptionValueInfos(Map<String, Object>  returnMsgs , String[] skuIds,String[] optionIds,List<String[]> skuOptionValueIdsList);
	
	/**
	 * 根据productSkuCode(规格SKU编号)获得ProductSku实体
	 * @param productSkuCode SKU编号
	 * @return 规格实体
	 */
	public ProductSku getProductSkuByProductSkuCode(String productSkuCode);
	
	/**
	 * 根据productSkuCode(规格SKU编号)获得ProductSku实体,与hibernate session彻底脱离
	 * @param productSkuCode SKU编号
	 * @return 规格实体
	 */
	public ProductSku getProductSkuPojoByProductSkuCode(String productSkuCode);
	
	 /**
     * 根据单品编码找出单品个数，但该单品的不能是参数id所指定的单品
     *
     * @param productSkuCode 单品编码
     * @param productSkuId 单品id
     * @return 个数
     */
    public Long getSizeByProductSkuCodeByNotProductSkuId(String productSkuCode,Integer productSkuId);
    /**
     * 完全删除函数
     * @param sku 单品
     */
    public void deleteFully(ProductSku sku);
    	
}
